package TestExercises07;

//多线程练习4(抢红包)

import java.util.Random;

//方法一
/*
抢红包也用到了多线程。
假设:100块，分成了3个包，现在有5个人去抢。
其中，红包是共享数据。
5个人是5条线程。
打印结果如下:
      XXX抢到了XXX元
      XXX抢到了XXX元
      XXX抢到了XXX元
      XXX没抢到
      XXX没抢到
 */
public class Test04case1 {
    public static void main(String[] args) {

        //创建线程对象
        MyThread04 t1 = new MyThread04();
        MyThread04 t2 = new MyThread04();
        MyThread04 t3 = new MyThread04();
        MyThread04 t4 = new MyThread04();
        MyThread04 t5 = new MyThread04();

        //设置线程名字
        t1.setName("线程1");
        t2.setName("线程2");
        t3.setName("线程3");
        t4.setName("线程4");
        t5.setName("线程5");

        //开启线程
        t1.start();
        t2.start();
        t3.start();
        t4.start();
        t5.start();
    }
}

class MyThread04 extends Thread {

    //共享数据：100块分3个包
    static double money = 100;
    static int count = 3;

    //最小的中奖金额
    static final double MIN = 0.01;

    @Override
    public void run() {
        //同步代码块
        synchronized (MyThread04.class) {
            if (count == 0) {
                //判断，共享数据是否到了末尾（已经到末尾）
                System.out.println(getName() + "没有抢到红包");
            } else {
                //判断，共享数据是否已经到了末尾（没有到末尾）
                //定义一个变量，表示中奖的金额
                double prize = 0;
                if (count == 1) {
                    //表示此时是最后一个红包
                    //就无需随机，剩余所有的钱都是中奖金额
                    prize = money;
                } else {
                    //表示第一次，第二次（随机）
                    Random r = new Random();
                    double bounns = money - (count - 1) * MIN;
                    prize = r.nextDouble(bounns);
                    if (prize < MIN) {
                        prize = MIN;
                    }
                }
                //从money中去掉当前中奖的金额
                money = money - prize;
                //红包个数减1
                count--;
                //本次红包的信息进行打印
                System.out.println(getName() + "抢到了" + prize + "元");
            }
        }
    }
}
